_superframeJSLoader(function () {
    (function (define, require, vw, page) {
        with (page) {
            this.Hammer = function (e, t) {
                "use strict";

                function n() {
                    r.READY || (T.determineEventTypes(), E.each(r.gestures, function (e) {
                        M.register(e)
                    }), T.onTouch(r.DOCUMENT, d, M.detect), T.onTouch(r.DOCUMENT, g, M.detect), r.READY = !0)
                }

                var r = function y(e, t) {
                    return new y.Instance(e, t || {})
                };
                r.VERSION = "1.1.3", r.defaults = {
                    behavior: {
                        userSelect: "none",
                        touchAction: "pan-y",
                        touchCallout: "none",
                        contentZooming: "none",
                        userDrag: "none",
                        tapHighlightColor: "rgba(0,0,0,0)"
                    }
                }, r.DOCUMENT = document, r.HAS_POINTEREVENTS = navigator.pointerEnabled || navigator.msPointerEnabled, r.HAS_TOUCHEVENTS = "ontouchstart" in e, r.IS_MOBILE = /mobile|tablet|ip(ad|hone|od)|android|silk/i.test(navigator.userAgent), r.NO_MOUSEEVENTS = r.HAS_TOUCHEVENTS && r.IS_MOBILE || r.HAS_POINTEREVENTS, r.CALCULATE_INTERVAL = 25;
                var i = {}, a = r.DIRECTION_DOWN = "down", o = r.DIRECTION_LEFT = "left", s = r.DIRECTION_UP = "up",
                    c = r.DIRECTION_RIGHT = "right", u = r.POINTER_MOUSE = "mouse", l = r.POINTER_TOUCH = "touch",
                    h = r.POINTER_PEN = "pen", p = r.EVENT_START = "start", d = r.EVENT_MOVE = "move",
                    g = r.EVENT_END = "end", v = r.EVENT_RELEASE = "release", f = r.EVENT_TOUCH = "touch";
                r.READY = !1, r.plugins = r.plugins || {}, r.gestures = r.gestures || {};
                var E = r.utils = {
                    extend: function (e, n, r) {
                        for (var i in n) !n.hasOwnProperty(i) || e[i] !== t && r || (e[i] = n[i]);
                        return e
                    }, on: function (e, t, n) {
                        e && e.addEventListener && "function" == typeof e.addEventListener && e.addEventListener(t, n, !1)
                    }, off: function (e, t, n) {
                        e.removeEventListener(t, n, !1)
                    }, each: function (e, n, r) {
                        var i, a;
                        if ("forEach" in e) e.forEach(n, r); else if (e.length !== t) {
                            for (i = 0, a = e.length; a > i; i++) if (n.call(r, e[i], i, e) === !1) return
                        } else for (i in e) if (e.hasOwnProperty(i) && n.call(r, e[i], i, e) === !1) return
                    }, inStr: function (e, t) {
                        return e.indexOf(t) > -1
                    }, inArray: function (e, t) {
                        if (e.indexOf) {
                            var n = e.indexOf(t);
                            return -1 === n ? !1 : n
                        }
                        for (var r = 0, i = e.length; i > r; r++) if (e[r] === t) return r;
                        return !1
                    }, toArray: function (e) {
                        return Array.prototype.slice.call(e, 0)
                    }, hasParent: function (e, t) {
                        for (; e;) {
                            if (e == t) return !0;
                            e = e.parentNode
                        }
                        return !1
                    }, getCenter: function (e) {
                        var t = [], n = [], r = [], i = [], a = Math.min, o = Math.max;
                        return 1 === e.length ? {
                            pageX: e[0].pageX,
                            pageY: e[0].pageY,
                            clientX: e[0].clientX,
                            clientY: e[0].clientY
                        } : (E.each(e, function (e) {
                            t.push(e.pageX), n.push(e.pageY), r.push(e.clientX), i.push(e.clientY)
                        }), {
                            pageX: (a.apply(Math, t) + o.apply(Math, t)) / 2,
                            pageY: (a.apply(Math, n) + o.apply(Math, n)) / 2,
                            clientX: (a.apply(Math, r) + o.apply(Math, r)) / 2,
                            clientY: (a.apply(Math, i) + o.apply(Math, i)) / 2
                        })
                    }, getVelocity: function (e, t, n) {
                        return {x: Math.abs(t / e) || 0, y: Math.abs(n / e) || 0}
                    }, getAngle: function (e, t) {
                        var n = t.clientX - e.clientX, r = t.clientY - e.clientY;
                        return 180 * Math.atan2(r, n) / Math.PI
                    }, getDirection: function (e, t) {
                        var n = Math.abs(e.clientX - t.clientX), r = Math.abs(e.clientY - t.clientY);
                        return n >= r ? e.clientX - t.clientX > 0 ? o : c : e.clientY - t.clientY > 0 ? s : a
                    }, getDistance: function (e, t) {
                        var n = t.clientX - e.clientX, r = t.clientY - e.clientY;
                        return Math.sqrt(n * n + r * r)
                    }, getScale: function (e, t) {
                        return e.length >= 2 && t.length >= 2 ? this.getDistance(t[0], t[1]) / this.getDistance(e[0], e[1]) : 1
                    }, getRotation: function (e, t) {
                        return e.length >= 2 && t.length >= 2 ? this.getAngle(t[1], t[0]) - this.getAngle(e[1], e[0]) : 0
                    }, isVertical: function (e) {
                        return e == s || e == a
                    }, setPrefixedCss: function (e, t, n, r) {
                        var i = ["", "Webkit", "Moz", "O", "ms"];
                        t = E.toCamelCase(t);
                        for (var a = 0; a < i.length; a++) {
                            var o = t;
                            if (i[a] && (o = i[a] + o.slice(0, 1).toUpperCase() + o.slice(1)), o in e.style) {
                                e.style[o] = (null == r || r) && n || "";
                                break
                            }
                        }
                    }, toggleBehavior: function (e, t, n) {
                        // if (t && e && e.style) {
                        //     E.each(t, function (t, r) {
                        //         E.setPrefixedCss(e, r, t, n)
                        //     });
                        //     var r = n && function () {
                        //         return !1
                        //     };
                        //     "none" == t.userSelect && (e.onselectstart = r), "none" == t.userDrag && (e.ondragstart = r)
                        // }
                    }, toCamelCase: function (e) {
                        return e.replace(/[_-]([a-z])/g, function (e) {
                            return e[1].toUpperCase()
                        })
                    }
                }, T = r.event = {
                    preventMouseEvents: !1, started: !1, shouldDetect: !1, on: function (e, t, n, r) {
                        var i = t.split(" ");
                        E.each(i, function (t) {
                            E.on(e, t, n), r && r(t)
                        })
                    }, off: function (e, t, n, r) {
                        var i = t.split(" ");
                        E.each(i, function (t) {
                            E.off(e, t, n), r && r(t)
                        })
                    }, onTouch: function (e, t, n) {
                        var a = this, o = function (i) {
                            var o, s = i.type.toLowerCase(), c = r.HAS_POINTEREVENTS, u = E.inStr(s, "mouse");
                            u && a.preventMouseEvents || (u && t == p && 0 === i.button ? (a.preventMouseEvents = !1, a.shouldDetect = !0) : c && t == p ? a.shouldDetect = 1 === i.buttons || m.matchType(l, i) : u || t != p || (a.preventMouseEvents = !0, a.shouldDetect = !0), c && t != g && m.updatePointer(t, i), a.shouldDetect && (o = a.doDetect.call(a, i, t, e, n)), o == g && (a.preventMouseEvents = !1, a.shouldDetect = !1, m.reset()), c && t == g && m.updatePointer(t, i))
                        };
                        return this.on(e, i[t], o), e === r.DOCUMENT && $.sfDetach(function () {
                            a.off(e, i[t], o)
                        }), o
                    }, doDetect: function (e, t, n, r) {
                        var i = this.getTouchList(e, t), a = i.length, o = t, s = i.trigger, c = a;
                        t == p ? s = f : t == g && (s = v, c = i.length - (e.changedTouches ? e.changedTouches.length : 1)), c > 0 && this.started && (o = d), this.started = !0;
                        var u = this.collectEventData(n, o, i, e);
                        return t != g && r.call(M, u), s && (u.changedLength = c, u.eventType = s, r.call(M, u), u.eventType = o, delete u.changedLength), o == g && (r.call(M, u), this.started = !1), o
                    }, determineEventTypes: function () {
                        var t;
                        return t = r.HAS_POINTEREVENTS ? e.PointerEvent ? ["pointerdown", "pointermove", "pointerup pointercancel lostpointercapture"] : ["MSPointerDown", "MSPointerMove", "MSPointerUp MSPointerCancel MSLostPointerCapture"] : r.NO_MOUSEEVENTS ? ["touchstart", "touchmove", "touchend touchcancel"] : ["touchstart mousedown", "touchmove mousemove", "touchend touchcancel mouseup"], i[p] = t[0], i[d] = t[1], i[g] = t[2], i
                    }, getTouchList: function (e, t) {
                        if (r.HAS_POINTEREVENTS) return m.getTouchList();
                        if (e.touches) {
                            if (t == d) return e.touches;
                            var n = [], i = [].concat(E.toArray(e.touches), E.toArray(e.changedTouches)), a = [];
                            return E.each(i, function (e) {
                                E.inArray(n, e.identifier) === !1 && a.push(e), n.push(e.identifier)
                            }), a
                        }
                        return e.identifier = 1, [e]
                    }, collectEventData: function (e, t, n, r) {
                        var i = l;
                        return E.inStr(r.type, "mouse") || m.matchType(u, r) ? i = u : m.matchType(h, r) && (i = h), {
                            center: E.getCenter(n),
                            timeStamp: Date.now(),
                            target: r.target,
                            touches: n,
                            eventType: t,
                            pointerType: i,
                            srcEvent: r,
                            preventDefault: function () {
                                var e = this.srcEvent;
                                e.preventManipulation && e.preventManipulation(), e.preventDefault && e.preventDefault()
                            },
                            stopPropagation: function () {
                                this.srcEvent.stopPropagation()
                            },
                            stopDetect: function () {
                                return M.stopDetect()
                            }
                        }
                    }
                }, m = r.PointerEvent = {
                    pointers: {}, getTouchList: function () {
                        var e = [];
                        return E.each(this.pointers, function (t) {
                            e.push(t)
                        }), e
                    }, updatePointer: function (e, t) {
                        e == g || e != g && 1 !== t.buttons ? delete this.pointers[t.pointerId] : (t.identifier = t.pointerId, this.pointers[t.pointerId] = t)
                    }, matchType: function (e, t) {
                        if (!t.pointerType) return !1;
                        var n = t.pointerType, r = {};
                        return r[u] = n === (t.MSPOINTER_TYPE_MOUSE || u), r[l] = n === (t.MSPOINTER_TYPE_TOUCH || l), r[h] = n === (t.MSPOINTER_TYPE_PEN || h), r[e]
                    }, reset: function () {
                        this.pointers = {}
                    }
                }, M = r.detection = {
                    gestures: [],
                    current: null,
                    previous: null,
                    stopped: !1,
                    startDetect: function (e, t) {
                        this.current || (this.stopped = !1, this.current = {
                            inst: e,
                            startEvent: E.extend({}, t),
                            lastEvent: !1,
                            lastCalcEvent: !1,
                            futureCalcEvent: !1,
                            lastCalcData: {},
                            name: ""
                        }, this.detect(t))
                    },
                    detect: function (e) {
                        if (this.current && !this.stopped) {
                            e = this.extendEventData(e);
                            var t = this.current.inst, n = t.options;
                            return E.each(this.gestures, function (r) {
                                !this.stopped && t.enabled && n[r.name] && r.handler.call(r, e, t)
                            }, this), this.current && (this.current.lastEvent = e), e.eventType == g && this.stopDetect(), e
                        }
                    },
                    stopDetect: function () {
                        this.previous = E.extend({}, this.current), this.current = null, this.stopped = !0
                    },
                    getCalculatedData: function (e, t, n, i, a) {
                        var o = this.current, s = !1, c = o.lastCalcEvent, u = o.lastCalcData;
                        c && e.timeStamp - c.timeStamp > r.CALCULATE_INTERVAL && (t = c.center, n = e.timeStamp - c.timeStamp, i = e.center.clientX - c.center.clientX, a = e.center.clientY - c.center.clientY, s = !0), (e.eventType == f || e.eventType == v) && (o.futureCalcEvent = e), (!o.lastCalcEvent || s) && (u.velocity = E.getVelocity(n, i, a), u.angle = E.getAngle(t, e.center), u.direction = E.getDirection(t, e.center), o.lastCalcEvent = o.futureCalcEvent || e, o.futureCalcEvent = e), e.velocityX = u.velocity.x, e.velocityY = u.velocity.y, e.interimAngle = u.angle, e.interimDirection = u.direction
                    },
                    extendEventData: function (e) {
                        var t = this.current, n = t.startEvent, r = t.lastEvent || n;
                        (e.eventType == f || e.eventType == v) && (n.touches = [], E.each(e.touches, function (e) {
                            n.touches.push({clientX: e.clientX, clientY: e.clientY})
                        }));
                        var i = e.timeStamp - n.timeStamp, a = e.center.clientX - n.center.clientX,
                            o = e.center.clientY - n.center.clientY;
                        return this.getCalculatedData(e, r.center, i, a, o), E.extend(e, {
                            startEvent: n,
                            deltaTime: i,
                            deltaX: a,
                            deltaY: o,
                            distance: E.getDistance(n.center, e.center),
                            angle: E.getAngle(n.center, e.center),
                            direction: E.getDirection(n.center, e.center),
                            scale: E.getScale(n.touches, e.touches),
                            rotation: E.getRotation(n.touches, e.touches)
                        }), e
                    },
                    register: function (e) {
                        var n = e.defaults || {};
                        return n[e.name] === t && (n[e.name] = !0), E.extend(r.defaults, n, !0), e.index = e.index || 1e3, this.gestures.push(e), this.gestures.sort(function (e, t) {
                            return e.index < t.index ? -1 : e.index > t.index ? 1 : 0
                        }), this.gestures
                    }
                };
                return r.Instance = function (e, t) {
                    var i = this;
                    n(), this.element = e, this.enabled = !0, E.each(t, function (e, n) {
                        delete t[n], t[E.toCamelCase(n)] = e
                    }), this.options = E.extend(E.extend({}, r.defaults), t || {}), this.options.behavior && E.toggleBehavior(this.element, this.options.behavior, !0), this.eventStartHandler = T.onTouch(e, p, function (e) {
                        i.enabled && e.eventType == p ? M.startDetect(i, e) : e.eventType == f && M.detect(e)
                    }), this.eventHandlers = []
                }, r.Instance.prototype = {
                    on: function (e, t) {
                        var n = this;
                        return T.on(n.element, e, t, function (e) {
                            n.eventHandlers.push({gesture: e, handler: t})
                        }), n
                    }, off: function (e, t) {
                        var n = this;
                        return T.off(n.element, e, t, function (e) {
                            var r = E.inArray({gesture: e, handler: t});
                            r !== !1 && n.eventHandlers.splice(r, 1)
                        }), n
                    }, trigger: function (e, t) {
                        t || (t = {});
                        var n = r.DOCUMENT.createEvent("Event");
                        n.initEvent(e, !0, !0), n.gesture = t;
                        var i = this.element;
                        return E.hasParent(t.target, i) && (i = t.target), i.dispatchEvent(n), this
                    }, enable: function (e) {
                        return this.enabled = e, this
                    }, dispose: function () {
                        var e, t;
                        for (E.toggleBehavior(this.element, this.options.behavior, !1), e = -1; t = this.eventHandlers[++e];) E.off(this.element, t.gesture, t.handler);
                        return this.eventHandlers = [], T.off(this.element, i[p], this.eventStartHandler), null
                    }
                }, function (e) {
                    function t(t, r) {
                        var i = M.current;
                        if (!(r.options.dragMaxTouches > 0 && t.touches.length > r.options.dragMaxTouches)) switch (t.eventType) {
                            case p:
                                n = !1;
                                break;
                            case d:
                                if (t.distance < r.options.dragMinDistance && i.name != e) return;
                                var u = i.startEvent.center;
                                if (i.name != e && (i.name = e, r.options.dragDistanceCorrection && t.distance > 0)) {
                                    var l = Math.abs(r.options.dragMinDistance / t.distance);
                                    u.pageX += t.deltaX * l, u.pageY += t.deltaY * l, u.clientX += t.deltaX * l, u.clientY += t.deltaY * l, t = M.extendEventData(t)
                                }
                                (i.lastEvent.dragLockToAxis || r.options.dragLockToAxis && r.options.dragLockMinDistance <= t.distance) && (t.dragLockToAxis = !0);
                                var h = i.lastEvent.direction;
                                t.dragLockToAxis && h !== t.direction && (t.direction = E.isVertical(h) ? t.deltaY < 0 ? s : a : t.deltaX < 0 ? o : c), n || (r.trigger(e + "start", t), n = !0), r.trigger(e, t), r.trigger(e + t.direction, t);
                                var f = E.isVertical(t.direction);
                                (r.options.dragBlockVertical && f || r.options.dragBlockHorizontal && !f) && t.preventDefault();
                                break;
                            case v:
                                n && t.changedLength <= r.options.dragMaxTouches && (r.trigger(e + "end", t), n = !1);
                                break;
                            case g:
                                n = !1
                        }
                    }

                    var n = !1;
                    r.gestures.Drag = {
                        name: e,
                        index: 50,
                        handler: t,
                        defaults: {
                            dragMinDistance: 10,
                            dragDistanceCorrection: !0,
                            dragMaxTouches: 1,
                            dragBlockHorizontal: !1,
                            dragBlockVertical: !1,
                            dragLockToAxis: !1,
                            dragLockMinDistance: 25
                        }
                    }
                }("drag"), r.gestures.Gesture = {
                    name: "gesture", index: 1337, handler: function (e, t) {
                        t.trigger(this.name, e)
                    }
                }, function (e) {
                    function t(t, r) {
                        var i = r.options, a = M.current;
                        switch (t.eventType) {
                            case p:
                                clearTimeout(n), a.name = e, n = setTimeout(function () {
                                    a && a.name == e && r.trigger(e, t)
                                }, i.holdTimeout);
                                break;
                            case d:
                                t.distance > i.holdThreshold && clearTimeout(n);
                                break;
                            case v:
                                clearTimeout(n)
                        }
                    }

                    var n;
                    r.gestures.Hold = {name: e, index: 10, defaults: {holdTimeout: 500, holdThreshold: 2}, handler: t}
                }("hold"), r.gestures.Release = {
                    name: "release", index: 1 / 0, handler: function (e, t) {
                        e.eventType == v && t.trigger(this.name, e)
                    }
                }, r.gestures.Swipe = {
                    name: "swipe",
                    index: 40,
                    defaults: {swipeMinTouches: 1, swipeMaxTouches: 1, swipeVelocityX: .6, swipeVelocityY: .6},
                    handler: function (e, t) {
                        if (e.eventType == v) {
                            var n = e.touches.length, r = t.options;
                            if (n < r.swipeMinTouches || n > r.swipeMaxTouches) return;
                            (e.velocityX > r.swipeVelocityX || e.velocityY > r.swipeVelocityY) && (t.trigger(this.name, e), t.trigger(this.name + e.direction, e))
                        }
                    }
                }, function (e) {
                    function t(t, r) {
                        var i, a, o = r.options, s = M.current, c = M.previous;
                        switch (t.eventType) {
                            case p:
                                n = !1;
                                break;
                            case d:
                                n = n || t.distance > o.tapMaxDistance;
                                break;
                            case g:
                                !E.inStr(t.srcEvent.type, "cancel") && t.deltaTime < o.tapMaxTime && !n && (i = c && c.lastEvent && t.timeStamp - c.lastEvent.timeStamp, a = !1, c && c.name == e && i && i < o.doubleTapInterval && t.distance < o.doubleTapDistance && (r.trigger("doubletap", t), a = !0), (!a || o.tapAlways) && (s.name = e, r.trigger(s.name, t)))
                        }
                    }

                    var n = !1;
                    r.gestures.Tap = {
                        name: e,
                        index: 100,
                        handler: t,
                        defaults: {
                            tapMaxTime: 250,
                            tapMaxDistance: 10,
                            tapAlways: !0,
                            doubleTapDistance: 20,
                            doubleTapInterval: 300
                        }
                    }
                }("tap"), r.gestures.Touch = {
                    name: "touch",
                    index: -1 / 0,
                    defaults: {preventDefault: !1, preventMouse: !1},
                    handler: function (e, t) {
                        return t.options.preventMouse && e.pointerType == u ? void e.stopDetect() : (t.options.preventDefault && e.preventDefault(), void(e.eventType == f && t.trigger("touch", e)))
                    }
                }, function (e) {
                    function t(t, r) {
                        switch (t.eventType) {
                            case p:
                                n = !1;
                                break;
                            case d:
                                if (t.touches.length < 2) return;
                                var i = Math.abs(1 - t.scale), a = Math.abs(t.rotation);
                                if (i < r.options.transformMinScale && a < r.options.transformMinRotation) return;
                                M.current.name = e, n || (r.trigger(e + "start", t), n = !0), r.trigger(e, t), a > r.options.transformMinRotation && r.trigger("rotate", t), i > r.options.transformMinScale && (r.trigger("pinch", t), r.trigger("pinch" + (t.scale < 1 ? "in" : "out"), t));
                                break;
                            case v:
                                n && t.changedLength < 2 && (r.trigger(e + "end", t), n = !1)
                        }
                    }

                    var n = !1;
                    r.gestures.Transform = {
                        name: e,
                        index: 45,
                        defaults: {transformMinScale: .01, transformMinRotation: 1},
                        handler: t
                    }
                }("transform"), r
            }(window);
        }
    }).apply(window._SF_ ? window._SF_.page : window, window._SF_ ? [window._SF_.page.define, window._SF_.page.require, window._SF_.vw, window._SF_.page] : [window.define, window.require, null, null]);
    ;(function (define, require, vw, page){with(page){define("sf_common:widget/util/cross_domain/event.js",function(t,n){"use strict";var e=function(){function t(){var t=Object.create(e);return t.events={},t}function n(t){this.type=t,this.timeStamp=new Date}var e={};return e.on=function(t,n){return this.events.hasOwnProperty(t)?this.events[t].push(n):this.events[t]=[n],this},e.off=function(t,n){return 0===arguments.length?this._offAll():void 0===n?this._offByType(t):this._offByHandler(t,n)},e.trigger=function(t,e){return t instanceof n||(t=new n(t)),this._dispatch(t,e)},e._dispatch=function(t,n){if(this.events.hasOwnProperty(t.type)){n=n||[],n.unshift(t);var e=this.events[t.type]||[];return e.forEach(function(t){return t.apply(null,n)}),this}},e._offByHandler=function(t,n){if(this.events.hasOwnProperty(t)){var e=this.events[t].indexOf(n);return e>-1&&this.events[t].splice(e,1),this}},e._offByType=function(t){return this.events.hasOwnProperty(t)&&delete this.events[t],this},e._offAll=function(){return this.events={},this},t.Event=n,t.mixin=function(n,e){var i=new t;e.map(function(t){n[t]=function(){return i[t].apply(i,arguments)}})},t}(),i=function(t){e.mixin(t,["on","off","trigger"])};n.EventEmitter=e,n.wrapEvent=i});}}).apply(window._SF_ ? window._SF_.page : window, window._SF_ ? [window._SF_.page.define,window._SF_.page.require,window._SF_.vw,window._SF_.page] : [window.define,window.require,null,null]);
    ;(function (define, require, vw, page){with(page){define("sf_common:widget/util/cross_domain/promise.js",function(t,n){"use strict";var e=function(){function t(n){if(!(this instanceof t))throw"Promise must be called with new operator";if("function"!=typeof n)throw"callback not defined";this._state=e,this._result,this._fulfilledCbs=[],this._rejectedCbs=[];var i=this;setTimeout(function(){i._doResolve(n)})}function n(t){return t&&"function"==typeof t.then}var e=0,i=1,o=2,r={longStackTraces:!1};return t.prototype._fulfill=function(t){this._result=t,this._state=i,this._flush()},t.prototype._reject=function(t){r.longStackTraces&&t&&(t.stack+="\n"+this._originalStack),this._result=t,this._state=o,this._flush()},t.prototype._resolve=function(t){n(t)?this._doResolve(t.then.bind(t)):this._fulfill(t)},t.prototype._doResolve=function(t){var n=!1,e=this;try{t(function(t){n||(n=!0,e._resolve(t))},function(t){n||(n=!0,e._reject(t))})}catch(i){if(n)return;n=!0,e._reject(i)}},t.prototype._flush=function(){if(this._state!==e){var t=this._state===o?this._rejectedCbs:this._fulfilledCbs,n=this;t.forEach(function(t){"function"==typeof t&&t(n._result)}),this._rejectedCbs=[],this._fulfilledCbs=[]}},t.prototype._done=function(t,n){this._fulfilledCbs.push(t),this._rejectedCbs.push(n),this._flush()},t.prototype.then=function(n,e){var i,o=this;return new t(function(t,r){o._done(function(e){if("function"==typeof n){try{i=n(e)}catch(o){return r(o)}t(i)}else t(e)},function(n){if("function"==typeof e){try{i=e(n)}catch(o){return r(o)}t(i)}else r(n)})})},t.prototype.catch=function(t){return this.then(function(t){return t},t)},t.prototype.finally=function(t){return this.then(t,t)},t.resolve=function(e){return n(e)?e:new t(function(t){return t(e)})},t.reject=function(n){return new t(function(t,e){e(n)})},t.all=function(n){return new t(function(e,i){var o=n.map(function(){return void 0}),r=0;n.map(t.resolve).forEach(function(t,s){t.then(function(t){o[s]=t,r++,r===n.length&&e(o)},i)})})},t.mapSeries=function(n,e){var i=t.resolve("init"),o=[];return n.forEach(function(t,r){i=i.then(function(){return e(t,r,n)}).then(function(t){return o.push(t)})}),i.then(function(){return o})},t}();n.Promise=e});}}).apply(window._SF_ ? window._SF_.page : window, window._SF_ ? [window._SF_.page.define,window._SF_.page.require,window._SF_.vw,window._SF_.page] : [window.define,window.require,null,null]);
    ;(function (define, require, vw, page){with(page){define("sf_common:widget/util/cross_domain/messenger.js",function(e,t){"use strict";var n=e("sf_common:widget/util/cross_domain/event.js"),r=e("sf_common:widget/util/cross_domain/promise.js"),i=n.wrapEvent,s=r.Promise,o=function(e,t){function n(){return(1e3*(new Date).getTime()+Math.ceil(1e3*Math.random())).toString(36)}var r=function(){var e={}.hasOwnProperty;return function(t,n){for(var r in n)e.call(n,r)&&(t[r]=n[r])}}(),i={twoWay:"two-way"},s={request:"PM_REQUEST",response:"PM_RESPONSE"},o={},a=function(t){return e(this),this.targetWindow=t.targetWindow||top,this.targetOrigin=t.targetOrigin||"*",this.sourceOrigins=t.sourceOrigins||["*"],this.timeout=t.timeout||500,this.name=t.name||window.name,this.defers={},this.handlers={},o[this.name],o[this.name]=this,a.bindHandler(),this},d=function(e){var t=o[e.data.name];if(t)t.processMessageEvent(e);else for(var n in o)o[n].processMessageEvent(e)};return a.bindHandler=function(){window.removeEventListener("message",d),window.addEventListener("message",d)},a.prototype={processMessageEvent:function(e){for(var t=e.origin||e.originalEvent.origin,n=this,o=!1,a=0;a<n.sourceOrigins.length;a++){var d=n.sourceOrigins[a];if("*"===d){o=!0;break}if(d===t){o=!0;break}}if(o){var c=e.data;if(c)if(c.type===i.twoWay){if(!c.sentinel||!c.sessionId)return;if(c.sentinel===s.request){var f={};if(n.handlers[c.event])try{f=n.handlers[c.event].call(n,c)}catch(u){f={error:u}}var g=function(e){e=e||{},r(e,{type:i.twoWay,sentinel:s.response,sessionId:c.sessionId,name:n.name}),n.getWindow().postMessage(e,n.targetOrigin)};f&&"function"==typeof f.then?f.then(function(e){g(e)}).catch(function(e){g({error:e})}):g(f)}else if(c.sentinel===s.response){var m=n.defers[c.sessionId];if(delete n.defers[c.sessionId],!m)return;clearTimeout(m.timer),c.error?m.reject(c.error):m.resolve(c)}}else{if(!c||!c.event)return;n.trigger(c.event,[c]),n.trigger("recivemessage",[c])}}},sendMessage:function(e,o,a){var d=this;return new t(function(t,c){var f={name:d.name,event:e},u=n();a?(r(f,{type:i.twoWay,sentinel:s.request,sessionId:u}),d.defers[u]={resolve:t.bind(this),reject:c.bind(this),timer:setTimeout(function(){delete d.defers[u],c(new Error("timeout"))},d.timeout)}):setTimeout(t,0),r(f,o),d.getWindow().postMessage(f,d.targetOrigin)})},setHandler:function(e,t){if("function"!=typeof t)throw new Error("Invalid handler for event "+e);this.handlers[e]=t},removeHandler:function(e){this.handlers[e]=void 0},destory:function(){delete o[this.name]},getWindow:function(){return this.targetWindow instanceof HTMLIFrameElement?this.targetWindow.contentWindow:this.targetWindow}},a.prototype.constructor=a,a}(i,s);t.Messenger=o});}}).apply(window._SF_ ? window._SF_.page : window, window._SF_ ? [window._SF_.page.define,window._SF_.page.require,window._SF_.vw,window._SF_.page] : [window.define,window.require,null,null]);
    ;(function (define, require, vw, page){with(page){define("sf_common:widget/util/cross_domain/cross_domain.js",function(e,t){var n=e("sf_common:widget/util/cross_domain/messenger.js"),o=e("sf_common:widget/util/cross_domain/promise.js"),r=n.Messenger,i=o.Promise,s=function(e,t){var n=!1,o=!1;try{n=!!window.localStorage,o=!!window.sessionStorage}catch(r){n=!1,o=!1}var i={getCookie:function(){return document.cookie},setCookie:function(e){document.cookie=e},getSupported:function(){return{localStorage:n,sessionStorage:o}},getLocalStorage:function(e){return n&&window.localStorage.getItem(e)},setLocalStorage:function(e,t){n&&window.localStorage.setItem(e,t)},removeLocalStorage:function(e){n&&window.localStorage.removeItem(e)},localStorageLength:function(){return n&&window.localStorage.length},localStorageKey:function(e){return n&&window.localStorage.key(e)},localStorageHas:function(e){return n&&window.localStorage.hasOwnProperty(e)},getSessionStorage:function(e){return o&&window.sessionStorage.getItem(e)},setSessionStorage:function(e,t){o&&window.sessionStorage.setItem(e,t)},removeSessionStorage:function(e){o&&window.sessionStorage.removeItem(e)},sessionStorageLength:function(){return o&&window.sessionStorage.length},sessionStorageKey:function(e){return o&&window.sessionStorage.key(e)},sessionStorageHas:function(e){return o&&window.sessionStorage.hasOwnProperty(e)}},s={get:function(e){return this.request("getCookie").then(function(t){var n=new RegExp("(?:^|; )"+encodeURIComponent(e)+"=([^;]*)").exec(t),o={value:null,options:null};return n&&(o.value=decodeURIComponent(n[1]),o.options={raw:n[1]}),o})},set:function(e,t,n){n=n||{},(null===t||void 0===t)&&(n.expires=-1);var o=n.expires;if("number"==typeof n.expires){var r=n.expires;o=n.expires=new Date,o.setTime(o.getTime()+r)}t=String(t);var i=[encodeURIComponent(e),"=",n.raw?t:encodeURIComponent(t),n.expires?"; expires="+n.expires.toUTCString():"",n.path?"; path="+n.path:"",n.domain?"; domain="+n.domain:"",n.secure?"; secure":""].join("");return this.request("setCookie",i)},remove:function(e,t){return t=t||{},t.expires=new Date(0),this.set(e,"",t)}},a={getItem:function(e){return this.request("get"+this.Name,e)},setItem:function(e,t){return this.request("set"+this.Name,e,t)},removeItem:function(e){return this.request("remove"+this.Name,e)},get:function(e){return this.getItem(e).then(function(e){try{return JSON.parse(e)}catch(t){return null}})},set:function(e,t){var n=JSON.stringify(t);return this.setItem(e,n).then(function(){return n})},isSupported:function(){var e=this;return this.request("getSupported").then(function(t){return t[e.name]}).catch(function(){return!1})},getKey:function(e){return this.request(this.name+"Key",e)},length:function(){return this.request(this.name+"Length")},has:function(){return this.request(this.name+"Has")}},u=function(n,o){if(this.domain=n,n===document.domain)this.isLocal=!0;else{this.isLocal=!1,this.proxyUrl=o,this.iframe=document.createElement("iframe"),this.iframe.name=parseInt(1e5*Math.random(),10).toString(34),this.iframe.src=o,this.iframe.style.display="none";var r=this;this.iframeLoadPromise=new t(function(e,t){r.iframe.addEventListener("load",e),r.iframe.addEventListener("error",t),document.body.appendChild(r.iframe)}),this.messenger=new e({targetWindow:this.iframe,name:this.iframe.name})}this.cookie=Object.create(s),this.cookie.request=this.request.bind(this),this.localStorage=Object.create(a),this.localStorage.request=this.request.bind(this),this.localStorage.name="localStorage",this.localStorage.Name="LocalStorage",this.sessionStorage=Object.create(a),this.sessionStorage.request=this.request.bind(this),this.sessionStorage.name="sessionStorage",this.sessionStorage.Name="SessionStorage"};return u.prototype.request=function(e,n,o){var r=this;return this.isLocal?new t(function(t,r){try{t(i[e](n,o))}catch(s){r(s)}}):this.iframeLoadPromise.then(function(){return r.messenger.sendMessage(e,{opArgs:[n,o]},!0).then(function(e){if(e.error)throw e.error;return e.result})})},u}(r,i);t.CrossDomain=s,t.createCrossDomain=function(e,t){return new s(e,t)};var a=null;t.createSingleCrossDomain=function(t,n){if(a)return a;var o="wk.baidu.com",r=(t?t.split(":")[0]:"")||e.globalData.get("urlDomainWithoutPort")||o,i=t||e.globalData.get("urlDomainPrefix")||o;return window._SF_.__SYNC__PAGE__&&(r=document.domain,i=window.location.host),"80"===i.split(":")[1]&&(i=o),n=n||"//"+i+"/proxy.html",a=new s(r,n)}});}}).apply(window._SF_ ? window._SF_.page : window, window._SF_ ? [window._SF_.page.define,window._SF_.page.require,window._SF_.vw,window._SF_.page] : [window.define,window.require,null,null]);
    ;(function (define, require, vw, page){with(page){var baidu="undefined"==typeof module?this.baidu=this.baidu||{}:module.exports;baidu.template=baidu.template||{},baidu.template._encodeHTML=function(e){return String(e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/\\/g,"&#92;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")},baidu.template._encodeEventHTML=function(e){return String(e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;").replace(/\\\\/g,"\\").replace(/\\\//g,"/").replace(/\\n/g,"\n").replace(/\\r/g,"\r")};}}).apply(window._SF_ ? window._SF_.page : window, window._SF_ ? [window._SF_.page.define,window._SF_.page.require,window._SF_.vw,window._SF_.page] : [window.define,window.require,null,null]);
    ;(function (define, require, vw, page){with(page){define("sf_common:widget/util/log.js",function(e,n,i){function t(e){this.config=e,this.run()}t.prototype.run=function(){this.pageViewLog().elViewLog().tapLog().businessLog()},t.prototype.pageViewLog=function(){var e=this.config;if(!e.pageView)return this;var n=$.isFunction(e.pageView.param)?e.pageView.param(arguments):e.pageView.param,i=$.extend(!0,{},n,{index:e.pageView.index});return wapfelog.send("pv",i,1,e.pageView.actId),this},t.prototype.elViewLog=function(){function e(){$.each(n.elView,function(e,n){var i=$(e);i.each(function(){var e=this;if(e&&e.getBoundingClientRect){var i=e.getBoundingClientRect().top,t=e.getBoundingClientRect().bottom,a=document.documentElement.clientHeight,o=$(e).data("viewed"),r=$(e).data("viewLogged");if(!n.once||!r)if(a>i&&t>0){if(o)return;$(e).data({viewed:!0,viewLogged:!0});var s=$.isFunction(n.index)?n.index.apply(e,arguments):n.index,c=$.isFunction(n.param)?n.param.apply(e,arguments):n.param,p=$.extend(!0,{},c,{index:s});wapfelog.send("pv",p,1,n.actId)}else(i>=a||0>=t)&&$(e).data({viewed:!1})}})})}var n=this.config;return n.elView?($(document).on("scroll.log",e).trigger("scroll"),$.sfDetach(function(){$(document).off("scroll.log",e)}),this):this},t.prototype.tapLog=function(){var e=this.config;return e.tap?($(vw.container).on("click",function(n){var i=$(n.target),t=this;$.each(e.tap,function(e,n){if(i.closest(e).length){var a=i.closest(e)[0]||t;if($.isArray(n))$.each(n,function(e,n){var i=$.isFunction(n.index)?n.index.apply(a,arguments):n.index,t=$.isFunction(n.param)?n.param.apply(a,arguments):n.param,o=$.extend(!0,{},t,{index:i});wapfelog.send("click",o,1,n.actId)});else if($.isPlainObject(n)){var o=$.isFunction(n.index)?n.index.apply(a,arguments):n.index,r=$.isFunction(n.param)?n.param.apply(a,arguments):n.param,s=$.extend(!0,{},r,{index:o});wapfelog.send("click",s,1,n.actId)}}})}),this):this},t.prototype.businessLog=function(){var e=this.config;return e.business?($.each(e.business,function(e,n){$(customEventMediator).on(e,function(){var e=this;if($.isArray(n))$.each(n,function(n,i){var t=$.isFunction(i.index)?i.index.apply(e,arguments):i.index,a=$.isFunction(i.param)?i.index.param(e,arguments):i.param,o=$.extend(!0,{},a,{index:t});wapfelog.send("pv",o,1,i.actId)});else if($.isPlainObject(n)){var i=$.isFunction(n.index)?n.index.apply(e,arguments):n.index,t=$.isFunction(n.param)?n.param.apply(e,arguments):n.param,a=$.extend(!0,{},t,{index:i});arguments.length>1&&"object"==typeof arguments[1]&&$.extend(!0,a,arguments[1]),wapfelog.send("pv",a,1,n.actId)}})}),this):this},i.exports=t});}}).apply(window._SF_ ? window._SF_.page : window, window._SF_ ? [window._SF_.page.define,window._SF_.page.require,window._SF_.vw,window._SF_.page] : [window.define,window.require,null,null]);
});